<html>
 <head>
  <meta charset="UTF-8">
 </head>
 <body>
  <h1 data-lake-id="zmERF" id="zmERF"><span data-lake-id="u140a3a65" id="u140a3a65">典型回答</span></h1>
  <p data-lake-id="ua00f0b6f" id="ua00f0b6f"><br></p>
  <p data-lake-id="uffcf9404" id="uffcf9404"><span data-lake-id="u477b652c" id="u477b652c">我们知道，HTTP/2之所以"被弃用"，是因为他使用的传输层协议仍然是TCP，所以HTTP/3首要解决的问题就是绕开TCP。</span></p>
  <p data-lake-id="u59250ab2" id="u59250ab2"><span data-lake-id="u9ae2ed2c" id="u9ae2ed2c">​</span><br></p>
  <p data-lake-id="u4d6060e6" id="u4d6060e6"><span data-lake-id="ubeca1009" id="ubeca1009">​</span><br></p>
  <p data-lake-id="u78305ce5" id="u78305ce5"><span data-lake-id="ubb731887" id="ubb731887">那么如果研发一种新的协议，同样还是会因为受到中间设备僵化的影响，导致无法被大规模应用。所以，研发人员们想到了一种基于UDP实现的方式。</span></p>
  <p data-lake-id="u76c43fb7" id="u76c43fb7"><span data-lake-id="ua79aa235" id="ua79aa235">​</span><br></p>
  <p data-lake-id="u87a51785" id="u87a51785"><span data-lake-id="u43ae6fd5" id="u43ae6fd5">于是，Google是最先采用这种方式并付诸于实践的，他们在2013年推出了一种叫做QUIC的协议，全称是</span><strong><span data-lake-id="u44b7308e" id="u44b7308e">Quick UDP Internet Connections</span></strong><span data-lake-id="u695bed9b" id="u695bed9b">。</span></p>
  <p data-lake-id="u76c6d00f" id="u76c6d00f"><span data-lake-id="udc915785" id="udc915785">​</span><br></p>
  <p data-lake-id="u45a63fc7" id="u45a63fc7"><strong><span data-lake-id="u093a989a" id="u093a989a">从名字中可以看出来，这是一种完全基于UDP的协议。</span></strong></p>
  <p data-lake-id="u2100b1ad" id="u2100b1ad"><span data-lake-id="u3a6635a7" id="u3a6635a7">​</span><br></p>
  <p data-lake-id="u3acd9ce0" id="u3acd9ce0"><span data-lake-id="u2f4c89e1" id="u2f4c89e1">在设计之初，Google就希望使用这个协议来取代HTTPS/HTTP协议，使网页传输速度加快。2015年6月，QUIC的网络草案被正式提交至互联网工程任务组。2018 年 10 月，互联网工程任务组 HTTP 及 QUIC 工作小组正式将基于 QUIC 协议的 HTTP（英语：HTTP over QUIC）重命名为HTTP/3。</span></p>
  <p data-lake-id="u95f403f9" id="u95f403f9"><span data-lake-id="ub390eb55" id="ub390eb55">​</span><br></p>
  <p data-lake-id="u10841a48" id="u10841a48"><span data-lake-id="u2d976cef" id="u2d976cef">所以，</span><strong><span data-lake-id="u02a542da" id="u02a542da">我们现在所提到的HTTP/3，其实就是HTTP over QUIC，即基于QUIC协议实现的HTTP。</span></strong></p>
  <p data-lake-id="u1447f5cb" id="u1447f5cb"><span data-lake-id="udb38c39d" id="udb38c39d">​</span><br></p>
  <p data-lake-id="u2470b9f5" id="u2470b9f5"><span data-lake-id="ue554ba0a" id="ue554ba0a">那么，想要了解HTTP/3的原理，只需要了解QUIC就可以了。</span></p>
  <p data-lake-id="u13619d88" id="u13619d88"><span data-lake-id="uc55ed637" id="uc55ed637">​</span><br></p>
  <p data-lake-id="ufe0c45f0" id="ufe0c45f0"><span data-lake-id="u6bb91f33" id="u6bb91f33">QUIC协议有以下特点：</span></p>
  <ul list="u8482a0ff">
   <li fid="uce0ccc67" data-lake-id="uebfa15eb" id="uebfa15eb"><strong><span data-lake-id="ue1f99b5e" id="ue1f99b5e">基于UDP</span></strong><span data-lake-id="uaf2cc7b3" id="uaf2cc7b3">的传输层协议：它使用UDP端口号来识别指定机器上的特定服务器。</span></li>
   <li fid="uce0ccc67" data-lake-id="uc17fa3c4" id="uc17fa3c4"><strong><span data-lake-id="u09adb572" id="u09adb572">可靠性</span></strong><span data-lake-id="u59bed9a4" id="u59bed9a4">：虽然UDP是不可靠传输协议，但是QUIC在UDP的基础上做了些改造，使得他提供了和TCP类似的可靠性。它提供了数据包重传、拥塞控制、调整传输节奏以及其他一些TCP中存在的特性。</span></li>
   <li fid="uce0ccc67" data-lake-id="u1fe8d6ce" id="u1fe8d6ce"><strong><span data-lake-id="u8d02388a" id="u8d02388a">实现了无序、并发字节流</span></strong><span data-lake-id="uc5d798f4" id="uc5d798f4">：QUIC的单个数据流可以保证有序交付，但多个数据流之间可能乱序，这意味着单个数据流的传输是按序的，但是多个数据流中接收方收到的顺序可能与发送方的发送顺序不同！</span></li>
   <li fid="uce0ccc67" data-lake-id="uc5df13d5" id="uc5df13d5"><strong><span data-lake-id="u9a7ad7b0" id="u9a7ad7b0">快速握手</span></strong><span data-lake-id="u5801b98b" id="u5801b98b">：QUIC提供0-RTT和1-RTT的连接建立</span></li>
   <li fid="uce0ccc67" data-lake-id="u3a3306ae" id="u3a3306ae"><strong><span data-lake-id="u20e27daf" id="u20e27daf">使用TLS 1.3传输层安全协议</span></strong><span data-lake-id="uda142150" id="uda142150">：与更早的TLS版本相比，TLS 1.3有着很多优点，但使用它的最主要原因是其握手所花费的往返次数更低，从而能降低协议的延迟。</span></li>
  </ul>
  <p data-lake-id="ub1d6089b" id="ub1d6089b"><br></p>
  <p data-lake-id="uf8e2de8d" id="uf8e2de8d"><span data-lake-id="ua11d43a2" id="ua11d43a2">那么，QUIC到底属于TCP/IP协议族中的那一层呢？我们知道，QUIC是基于UDP实现的，并且是HTTP/3的所依赖的协议，那么，按照TCP/IP的分层来讲，他是属于传输层的，也就是和TCP、UDP属于同一层。</span></p>
  <p data-lake-id="u09286e2b" id="u09286e2b"><span data-lake-id="u0d7cb5fb" id="u0d7cb5fb">​</span><br></p>
  <p data-lake-id="u1e6d9ca7" id="u1e6d9ca7"><span data-lake-id="u85ab9bb8" id="u85ab9bb8">如果更加细化一点的话，因为QUIC不仅仅承担了传输层协议的职责，还具备了TLS的安全性相关能力，所以，可以通过下图来理解QUIC在HTTP/3的实现中所处的位置。</span></p>
  <p data-lake-id="uca8ef141" id="uca8ef141"><span data-lake-id="ub9c7f7ad" id="ub9c7f7ad">​</span><br></p>
  <p data-lake-id="u300e2527" id="u300e2527"><img src="https://cdn.nlark.com/yuque/0/2023/jpeg/5378072/1692971332899-97e63d46-c1a7-4c8e-ba16-927c202851f1.jpeg?x-oss-process=image%2Fwatermark%2Ctype_d3F5LW1pY3JvaGVp%2Csize_27%2Ctext_SmF2YSA4IEd1IFA%3D%2Ccolor_FFFFFF%2Cshadow_50%2Ct_80%2Cg_se%2Cx_10%2Cy_10"></p>
  <p data-lake-id="u3004d410" id="u3004d410"><br></p>
  <p data-lake-id="u44715468" id="u44715468"><br></p>
  <p data-lake-id="u6395a161" id="u6395a161"><br></p>
 </body>
</html>